1 module deimos.basetsd;
2 
3 alias __int64 = long;
4 
5 version (Win32)
6 {
7   alias __int3264 = int;
8   immutable uint ADDRESS_TAG_BIT = 0x80000000;
9 }
10 else
11 {
12   alias __int3264 = long;
13   immutable ulong ADDRESS_TAG_BIT = 0x40000000000; 
14 }
15 
16 alias INT8     = byte;
17 alias INT16    = short;
18 alias LONG32   = int;
19 alias PLONG32  = int*;
20 alias INT32    = int;
21 alias PINT32   = int*;
22 alias UINT8    = ubyte;
23 alias UINT16   = ushort;
24 alias ULONG32  = uint;
25 alias PULONG32 = uint*;
26 alias DWORD32  = uint;
27 alias PDWORD32 = uint*;
28 alias UINT32   = uint;
29 alias PUINT32  = uint*;
30 
31 version(Win32)
32 {
33   alias INT_PTR    = int;
34   alias PINT_PTR   = int*;
35   alias UINT_PTR   = uint;
36   alias PUINT_PTR  = uint*;
37   alias LONG_PTR   = int;
38   alias PLONG_PTR  = int*;
39   alias ULONG_PTR  = uint;
40   alias PULONG_PTR = uint*;
41   alias UHALF_PTR  = ushort;
42   alias PUHALF_PTR = ushort*;
43   alias HALF_PTR   = short;
44   alias PHALF_PTR  = short*;
45   alias HANDLE_PTR = uint;
46 
47   uint HandleToUlong(const void* h)
48   { return(cast(uint)h); }
49   int HandleToLong(const void* h)
50   { return(cast(int)h); }
51   void* LongToHandle(const int h)
52   { return(cast(void*)h);}
53   uint PtrToUlong(const void* p)
54   { return(cast(uint) p); }
55   int PtrToLong(const void* p)
56   { return(cast(int) p); }
57   uint PtrToUint(const void* p)
58   { return(cast(uint) p); }
59   int PtrToInt(const void* p)
60   { return(cast(int) p); }
61   ushort PtrToUshort(const void* p)
62   { return(cast(ushort) cast(uint) p);}
63   short PtrToShort(const void* p)
64   { return(cast(short) cast(uint) p);}
65   void* IntToPtr(const int i)
66   { return(cast(void*)i); }
67   void* UIntToPtr(const uint ui)
68   { return(cast(void*)ui); }
69   alias UintToPtr = UIntToPtr;
70   void* LongToPtr(const int l)
71   { return(cast(void*)l); }
72   void* ULongToPtr(const uint ul)
73   { return(cast(void*)ul); }
74   alias UlongToPtr = ULongToPtr;
75 }
76 else
77 {
78   alias INT_PTR    = long;
79   alias PINT_PTR   = long*;
80   alias UINT_PTR   = ulong;
81   alias PUINT_PTR  = ulong*;
82   alias LONG_PTR   = long;
83   alias PLONG_PTR  = long*;
84   alias ULONG_PTR  = ulong;
85   alias PULONG_PTR = ulong*;
86   alias HANDLE_PTR = ulong*;
87   alias UHALF_PTR  = uint;
88   alias PUHALF_PTR = uint*;
89   alias HALF_PTR   = int;
90   alias PHALF_PTR  = int*;
91   
92   version(none)
93   {
94     /* TODO when WIN64 is here */
95     ulong HandleToUlong(const void* h )
96     { return(cast(ulong) h ); }
97     long HandleToLong( const void* h )
98     { return(cast(long) h ); }
99     void* LongToHandle( const long h )
100     { return(cast(void*) cast(INT_PTR) h ); }
101     ulong PtrToUlong( const void* p)
102     { return(cast(ulong) p ); }
103     uint PtrToUint( const void* p )
104     { return(cast(uint) p ); }
105     ushort PtrToUshort( const void* p )
106     { return(cast(ushort) p ); }
107     long PtrToLong( const void* p )
108     { return(cast(long) p ); }
109     int PtrToInt( const void* p )
110     { return(cast(int) p ); }
111     short PtrToShort( const void* p )
112     { return(cast(short) p ); }
113     void* IntToPtr( const int i )
114     { return( cast(void*) cast(INT_PTR)i ); }
115     void* UIntToPtr(const uint ui)
116     { return( cast(void*) cast(UINT_PTR)ui ); }
117     void* LongToPtr( const long l )
118     { return( cast(void*) cast(LONG_PTR)l ); }
119     void* ULongToPtr( const ulong ul )
120     { return( cast(void*) cast(ULONG_PTR)ul ); }
121   }
122 }
123 
124 alias SIZE_T     = ULONG_PTR;
125 alias PSIZE_T    = PULONG_PTR;
126 alias SSIZE_T    = LONG_PTR;
127 alias PSSIZE_T   = PLONG_PTR;
128 alias DWORD_PTR  = ULONG_PTR;
129 alias PDWORD_PTR = PULONG_PTR;
130 alias LONG64     = long;
131 alias PLONG64    = long*;
132 alias INT64      = long;
133 alias PINT64     = long*;
134 alias ULONG64    = ulong;
135 alias PULONG64   = ulong*;
136 alias DWORD64    = ulong;
137 alias PDWORD64   = ulong*;
138 alias UINT64     = ulong;
139 alias PUINT64    = ulong*;
140 
141 immutable MAXUINT_PTR = uint.max;
142 immutable MAXINT_PTR  = int.max;
143 immutable MININT_PTR  = int.min;
144 immutable MAXUHALF_PTR = ushort.max;
145 immutable MAXHALF_PTR  = short.max;
146 immutable MINHALF_PTR  = short.min;
147 
148 version(Win32)
149 {
150   immutable MAXULONG_PTR = uint.max;
151   immutable MAXLONG_PTR  = int.max;
152   immutable MINLONG_PTR  = int.min;
153 }
154 else
155 {
156   immutable MAXULONG_PTR = ulong.max;
157   immutable MAXLONG_PTR  = long.max;
158   immutable MINLONG_PTR  = long.min;
159 }